package br.com.documentos.controller;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import br.com.documentos.model.entity.Usuario;
import br.com.documentos.model.service.EmailUsuarioService;
import br.com.documentos.model.service.GeradorSenhaAutomatica;
import br.com.documentos.model.service.UsuarioService;
import br.com.documentos.model.util.CaptchaUtil;
import br.com.documentos.model.util.StringUtil;

@ManagedBean
public class NovaSenhaMB extends ManagerBeanBase{

	private static final long serialVersionUID = 1L;
	
	private String captcha = CaptchaUtil.createHtml();
	
	private String nome;
	private String email;
	
	@ManagedProperty("#{usuarioService}")
	private UsuarioService usuarioService;
	
	@ManagedProperty("#{emailUsuarioService}")
	private EmailUsuarioService emailUsuarioService;
	
	@ManagedProperty("#{geradorSenhaAutomatica}")
	private GeradorSenhaAutomatica geradorSenhaAutomatica;
	
	public void enviarNovaSenha(){
		if( ! CaptchaUtil.isValid(getRequest()) ){
			addError("Confirmação de imagem inválida.");
		}
		
		if( StringUtil.isEmpty(nome) || StringUtil.isEmpty(email) ){
			addError("Dados inválidos.");
		}
		
		if( hasNoErrors() ){
			Usuario usuario = usuarioService.buscarPorEmail(email);
			
			if( usuario != null && usuario.getNome().equalsIgnoreCase(nome) ){
				
				if( ! usuario.isAtivo() ){
					emailUsuarioService.enviarEmailAtivacaoConta(usuario, getUrlProjeto());
				}
				
				String novaSenha = geradorSenhaAutomatica.getRandomPassword();
				emailUsuarioService.enviarEmailNovaSenha(usuario, novaSenha);
				usuarioService.alterarSenha(usuario, novaSenha);
				
				addInfo("Nova senha gerada e enviada para "+ email +".");
			}
			else{
				addError("Dados inválidos.");
			}
		}
	}

	public String getCaptcha() {
		return captcha;
	}

	public void setCaptcha(String captcha) {
		this.captcha = captcha;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public UsuarioService getUsuarioService() {
		return usuarioService;
	}

	public void setUsuarioService(UsuarioService usuarioService) {
		this.usuarioService = usuarioService;
	}

	public EmailUsuarioService getEmailUsuarioService() {
		return emailUsuarioService;
	}

	public void setEmailUsuarioService(EmailUsuarioService emailUsuarioService) {
		this.emailUsuarioService = emailUsuarioService;
	}

	public GeradorSenhaAutomatica getGeradorSenhaAutomatica() {
		return geradorSenhaAutomatica;
	}

	public void setGeradorSenhaAutomatica(
			GeradorSenhaAutomatica geradorSenhaAutomatica) {
		this.geradorSenhaAutomatica = geradorSenhaAutomatica;
	}
}
